package model

import java.util.Random

abstract class Pista {
	
	@Property var String informacion
	@Property int numeroDePista
	
	/** Se encarga de armar la pista que es el texto que se muestra luego */
	abstract protected def void armarPista()

	override def toString() {
		this.informacion
	}

	 def int randInt(int min, int max) {

    	// NOTE: Usually this should be a field rather than a method
    	// variable so that it is not re-seeded every call.
    	val Random rand = new Random()

    	// nextInt is normally exclusive of the top value,
    	// so add 1 to make it inclusive
    	val int randomNum = rand.nextInt((max - min)) + min

   		 return randomNum
	}	
}

class NoPista extends Pista {
	
	new (){
		this.armarPista()
	}
	
	override protected armarPista() {
		informacion = "No hay pistas disponibles"
	}
	
}

class PistaDeDestinoDelVillano extends Pista {
	
	private var Pais pais
	
	
	new(Pais pais) {
		this.pais = pais
		this.armarPista()
	}
	
	override protected armarPista() {
		val maximo = this.pais.caracteristicas.size
		informacion = '''Creo que dijo que se dirigia hacia un lugar que se caracteriza por el/la «pais.caracteristicas.get(this.randInt(0, maximo))»'''
	}	
}

class PistaDeSenhaParticular extends Pista{
	
	private Villano villano
	
	new(Villano villano) {
		this.villano = villano	
		this.armarPista()
	}
	
	override protected armarPista() {
		val maximo = this.villano.senhas.size
		informacion = '''Recuerdo que algo caracteristico era que era «villano.senhas.get(this.randInt(0,maximo))»'''
	}
}

class PistaDeHobbie extends Pista{
	
	private Villano villano
	
	new(Villano villano) {
		this.villano = villano
		this.armarPista()
	}
	
	override protected armarPista() {
		val maximo = this.villano.hobbies.size
		informacion = ''' Me llamo la atención que le gustase «villano.hobbies.get(this.randInt(0,maximo))»'''
	}
	
}
class PistaSinInformacion extends Pista{
	
	override protected armarPista() {
		informacion = "Lo siento, creo que se ha equivocado de Ciudad. No hay nadie con esas caracteristicas."
	}
	
}
	
class MensajeVillanoEnCiudad extends Pista {
	
	new(){
		this.armarPista
	}
	
	override protected armarPista() {
		informacion = "¡CUIDADO DETECTIVE! Ha estado a punto de caer en una trampa... ¡La persona que busca esta en la ciudad!"
	}	
	
}

class MensajeGuaridaVillano extends Pista {
	
	private String nombreVillano
	
	new(String s){
		this.nombreVillano = s
		this.armarPista
	}
	
	override protected armarPista() {
		informacion = '''¡ALTO! Detengase: «nombreVillano»'''
	}
	
	
}